package leecode;

/**
 * @author cloudJiang
 * @date 2021/10/23 20:21
 */
public class Num8 {
    public static void main(String[] args) {
        //myAtoi();

        String[] strings = {"    4566", "s0521", "-1542s", "word", "-91283472332", "45", "", "-2147483647", "2147483647", "2147483648", "20000000000000000000", "00000000000000000002", "000000000000000000000000000000"
                , "2147483646","-2147483647"
        };

        for (String s : strings) {
            System.out.println(myAtoi(s));
        }


    }

//    public int myAtoi(String str) {
//        char[] chars = str.toCharArray();
//        int n = chars.length;
//        int idx = 0;
//        while (idx < n && chars[idx] == ' ') {
//            // 去掉前导空格
//            idx++;
//        }
//        if (idx == n) {
//            //去掉前导空格以后到了末尾了
//            return 0;
//        }
//        boolean negative = false;
//        if (chars[idx] == '-') {
//            //遇到负号
//            negative = true;
//            idx++;
//        } else if (chars[idx] == '+') {
//            // 遇到正号
//            idx++;
//        } else if (!Character.isDigit(chars[idx])) {
//            // 其他符号
//            return 0;
//        }
//        int ans = 0;
//        while (idx < n && Character.isDigit(chars[idx])) {
//            int digit = chars[idx] - '0';
//            if (ans > (Integer.MAX_VALUE - digit) / 10) {
//                // 本来应该是 ans * 10 + digit > Integer.MAX_VALUE
//                // 但是 *10 和 + digit 都有可能越界，所有都移动到右边去就可以了。
//                return negative? Integer.MIN_VALUE : Integer.MAX_VALUE;
//            }
//            ans = ans * 10 + digit;
//            idx++;
//        }
//        return negative? -ans : ans;
//    }

    public static int myAtoi(String s) {
        String num = "0";
        //true means num is positive number
        //false means num is negative number
        boolean sign = true;
        //strip " " ahead
        String s1 = s.stripLeading();
        //loop flag
        int i = 0;

        //not null
        if (!s1.equals("")) {
            //
            if (!Character.isDigit(s1.charAt(i))) {
                if (s1.charAt(i) == '-') {
                    if (s1.length() == 1) {
                        return 0;
                    }
                    sign = false;
                    i++;
                } else if (s1.charAt(i) == '+') {
                    if (s1.length() == 1) {
                        return 0;
                    }
                    i++;
                } else {
                    return 0;
                }
            }

            while (i < s1.length() && s1.charAt(i) == '0') {
                i++;
            }

            for (; i < s1.length(); i++) {
                if (Character.isDigit(s1.charAt(i))) {
                    num += s1.charAt(i);
                } else {
                    break;
                }
            }

            if (sign) {
                if (num.length() > 11) {
                    return 2147483647;
                }
                if (Long.parseLong(num) > 2147483647) {
                    return 2147483647;
                }
                return Integer.parseInt(num);
            } else {
                if (num.length() > 11) {
                    return -2147483648;
                }
                if (Long.parseLong(num) > 2147483647) {
                    return -2147483648;
                }
                return -Integer.parseInt(num);
            }
        }
        return 0;
    }
}
